前言
在許多應用程式中,會員系統是不可或缺的功能之一。無論是遊戲、商務應用,還是社群平台,都需要會員管理系統來處理用戶註冊、登錄和數據存儲。今天我會介紹如何使用 Firebase Realtime Database 和 Firebase Authentication 來打造一個簡單的會員系統。
流程步驟
1. 設置 Firebase 專案
2. 導入 Firebase SDK 到 Unity
3. Firebase Authentication 實作
在 Unity 中,我們使用 Firebase Authentication 來實現用戶的註冊和登入功能。
用戶註冊範例:
using Firebase.Auth;
using UnityEngine;
public class FirebaseAuthManager : MonoBehaviour
{
FirebaseAuth auth;
void Start()
{
auth = FirebaseAuth.DefaultInstance;
}
public void RegisterUser(string email, string password)
{
auth.CreateUserWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
if (task.IsCanceled || task.IsFaulted)
{
Debug.LogError("Registration failed.");
return;
}
FirebaseUser newUser = task.Result;
Debug.Log($"User registered: {newUser.Email}");
// 註冊成功後可以將用戶資料寫入 Realtime Database
SaveUserDataToDatabase(newUser);
});
}
void SaveUserDataToDatabase(FirebaseUser user)
{
// 待會會詳細介紹如何實作此方法
}
}
用戶登入範例:
public void LoginUser(string email, string password)
{
auth.SignInWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
if (task.IsCanceled || task.IsFaulted)
{
Debug.LogError("Login failed.");
return;
}
FirebaseUser user = task.Result;
Debug.Log($"User logged in: {user.Email}");
});
}
4. 使用 Firebase Realtime Database 存儲會員資料
註冊用戶成功後,我們可以將會員的相關資料(如用戶名、電子郵件、註冊日期等)存儲到 Firebase Realtime Database 中。
存儲會員資料範例:
using Firebase.Database;
using Firebase.Auth;
public void SaveUserDataToDatabase(FirebaseUser user)
{
DatabaseReference reference = FirebaseDatabase.DefaultInstance.RootReference;
User newUser = new User(user.Email, System.DateTime.Now.ToString());
string json = JsonUtility.ToJson(newUser);
reference.Child("users").Child(user.UserId).SetRawJsonValueAsync(json).ContinueWith(task => {
if (task.IsCompleted)
{
Debug.Log("User data saved to database.");
}
else
{
Debug.LogError("Failed to save user data.");
}
});
}
[System.Serializable]
public class User
{
public string email;
public string registrationDate;
public User(string email, string registrationDate)
{
this.email = email;
this.registrationDate = registrationDate;
}
}
5. 從 Firebase Realtime Database 獲取會員資料
當用戶登錄後,我們可以從 Realtime Database 中讀取該會員的資料,並顯示在應用程式中。
讀取會員資料範例:
public void GetUserData(string userId)
{
DatabaseReference reference = FirebaseDatabase.DefaultInstance.RootReference;
reference.Child("users").Child(userId).GetValueAsync().ContinueWith(task => {
if (task.IsCompleted && task.Result != null)
{
DataSnapshot snapshot = task.Result;
User user = JsonUtility.FromJson<User>(snapshot.GetRawJsonValue());
Debug.Log($"User email: {user.email}, Registration Date: {user.registrationDate}");
}
else
{
Debug.LogError("Failed to retrieve user data.");
}
});
}
6. Firebase Realtime Database 規則設置
默認情況下,Firebase Realtime Database 的讀寫操作可能受到權限限制。開發過程中,我們可以在 Firebase 控制台的 "Database" 中設置簡單的規則來允許所有讀寫操作(僅供開發測試用)。
開發時測試規則範例:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
這表示只有已通過身份驗證的用戶才可以讀取和寫入資料。
成品
可能遇到的問題及解決方法
1. Firebase SDK 無法正確導入:
2. Firebase Authentication 註冊/登錄失敗:
3. 無法連接到 Firebase Realtime Database:
結語
透過 Firebase Realtime Database 和 Firebase Authentication,我們可以快速實現一個基本的會員系統,並即時同步會員資料,讓我們的應用有雲端數據管理的能力。
如果有其他問題或進一步的需求,歡迎在留言區討論!